<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
     数组常用方法3

     1. push()
     2. pop()
     3. unshift()
     4. shift()
     5. reverse()
     6. sort()
     7. splice()

     ================== 以上 7 个方法会直接改变原始数组 ==================
     ================== 以下的方法不会改变原始数组 ==================

     8. concat()
       + 语法: 原始数组.concat(数组1, 数组2, 数据, ...)
       + 作用: 进行数组拼接, 把参数的所有数组或者数据, 拼接在原始数组身上
       + 返回值: 拼接好的数组
       + 和 push 的区别
         => 改变原始数组
           -> push 直接改变原始数组
           -> concat 不会改变原始数组
         => 插入数据
           -> push 直接把数据插入
           -> concat 如果遇到数组, 会把数组拆开, 把每一个数组依次插入

     9. join()
       + 语法: 数组.join('连接符')
       + 作用: 使用连接符, 把数组内的每一个数据连接成一个字符串(不写默认使用 逗号)
       + 返回值: 连接好的字符串

     10. slice()
       + 语法: 数组.slice(开始索引, 结束索引)
       + 参数特点:
         => 包前不包后, 包含开始索引位置数据, 不包含结束索引位置数据
         => 开始所以不填, 默认是 0, 结束索引不填, 默认是 length
         => 可以填写负整数, 表示倒数第几个, 其实就是 length + 负整数
       + 作用: 截取数据的部分内容
       + 返回值: 必然是一个新数组
         => 内部就是截取出来的部分内容
       + 和 splcie 的区别
         => 改变原始数组
           -> splice 改变原始数组
           -> slice 不改变原始数组
         => 参数
           -> splice(开始索引, 多少个)
           -> slice(开始索引, 结束索引)

     11. indexOf()
       + 语法:
         => 数组.indexOf(数据)
         => 数组.indexOf(数据, 开始索引)
       + 作用: 从前到后检索该数据第一次在该数组内出现的位置
       + 返回值:
         => 如果在数组内找到了该数据, 那么就是该数据第一次出现的索引位置
         => 如果在数据内没有找到该数据, 那么就是 -1

     12. lastIndexOf()
       + 语法:
         => 数组.lastIndexOf(数据)
         => 数组.lastIndexOf(数据, 开始索引)
       + 作用: 从后向前检索该数据第一次在该数组内出现的位置
       + 返回值:
         => 如果在数组内找到了该数据, 那么就是该数据第一次出现的索引位置
         => 如果在数据内没有找到该数据, 那么就是 -1
   */
    </script>
</body>

</html>